/*
 * jQuery liMarquee v 4.6
 *
 * Copyright 2013, Linnik Yura | LI MASS CODE | http://masscode.ru
 * http://masscode.ru/index.php/k2/item/44-limarquee
 * Free to use
 *
 * Last Update 20.11.2014
 */
layui.define(['jquery'], function (exports) {
	var jQuery = layui.jquery;
	(function ($) {
		var methods = {
			init: function (options) {
				var p = {
					direction: 'left', //Указывает направление движения содержимого контейнера (left | right | up | down)
					loop: -1, //Задает, сколько раз будет прокручиваться содержимое. "-1" для бесконечного воспроизведения движения
					scrolldelay: 0, //Величина задержки в миллисекундах между движениями
					scrollamount: 50, //Скорость движения контента (px/sec)
					circular: true, //Если "true" - строка непрерывная
					drag: true, //Если "true" - включено перетаскивание строки
					runshort: true, //Если "true" - короткая строка тоже "бегает", "false" - стоит на месте
					hoverstop: true, //true - строка останавливается при наведении курсора мыши, false - строка не останавливается
					inverthover: false, //false - стандартное поведение. Если "true" - строка начинает движение только при наведении курсора
					xml: false //Путь к xml файлу с нужным текстом
				};
				if (options) {
					$.extend(p, options);
				}

				return this.each(function () {
					var enterEvent = 'mouseenter';
					var leaveEvent = 'mouseleave';
					if (p.inverthover) {
						enterEvent = 'mouseleave';
						leaveEvent = 'mouseenter';
					}


					var
						loop = p.loop,
						strWrap = $(this).addClass('str_wrap').data({scrollamount: p.scrollamount}),
						fMove = false;


					var strWrapStyle = strWrap.attr('style');

					if (strWrapStyle) {
						var wrapStyleArr = strWrapStyle.split(';');
						var startHeight = false;
						for (var i = 0; i < wrapStyleArr.length; i++) {
							var str = $.trim(wrapStyleArr[i]);
							var tested = str.search(/^height/g);
							if (tested != -1) {
								startHeight = parseFloat(strWrap.css('height'));
							}
						}
					}

					var code = function () {

						strWrap.off('mouseleave');
						strWrap.off('mouseenter');
						strWrap.off('mousemove');
						strWrap.off('mousedown');
						strWrap.off('mouseup');


						if (!$('.str_move', strWrap).length) {
							strWrap.wrapInner($('<div>').addClass('str_move'));
						}

						var
							strMove = $('.str_move', strWrap).addClass('str_origin'),
							strMoveClone = strMove.clone().removeClass('str_origin').addClass('str_move_clone'),
							time = 0;

						if (!p.hoverstop) {
							strWrap.addClass('noStop');
						}

						var circCloneHor = function () {
							strMoveClone.clone().css({
								left: '100%',
								right: 'auto',
								width: strMove.width()
							}).appendTo(strMove);
							strMoveClone.css({
								right: '100%',
								left: 'auto',
								width: strMove.width()
							}).appendTo(strMove);
						}

						var circCloneVert = function () {
							strMoveClone.clone().css({
								top: '100%',
								bottom: 'auto',
								height: strMove.height()
							}).appendTo(strMove);
							strMoveClone.css({
								bottom: '100%',
								top: 'auto',
								height: strMove.height()
							}).appendTo(strMove);
						}


						if (p.direction == 'left') {
							strWrap.height(strMove.outerHeight())
							if (strMove.width() > strWrap.width()) {
								var leftPos = -strMove.width();

								if (p.circular) {

									if (!p.xml) {
										circCloneHor()
										leftPos = -(strMove.width() + (strMove.width() - strWrap.width()));
									}
								}
								if (p.xml) {
									strMove.css({
										left: strWrap.width()
									})
								}
								var
									strMoveLeft = strWrap.width(),
									k1 = 0,
									timeFunc1 = function () {
										var
											fullS = Math.abs(leftPos),
											time = (fullS / strWrap.data('scrollamount')) * 1000;
										if (parseFloat(strMove.css('left')) != 0) {
											fullS = (fullS + strWrap.width());
											time = (fullS - (strWrap.width() - parseFloat(strMove.css('left')))) / strWrap.data('scrollamount') * 1000;
										}
										return time;
									},
									moveFuncId1 = false,
									moveFunc1 = function () {
										if (loop != 0) {
											strMove.stop(true).animate({
												left: leftPos
											}, timeFunc1(), 'linear', function () {
												$(this).css({
													left: strWrap.width()
												});
												if (loop == -1) {
													moveFuncId1 = setTimeout(moveFunc1, p.scrolldelay);
												} else {
													loop--;
													moveFuncId1 = setTimeout(moveFunc1, p.scrolldelay);
												}
											});
										}
									};
								strWrap.data({
									moveId: moveFuncId1,
									moveF: moveFunc1
								})
								if (!p.inverthover) {
									moveFunc1();
								}

								if (p.hoverstop) {
									strWrap.on(enterEvent, function () {
										$(this).addClass('str_active');
										clearTimeout(moveFuncId1);
										strMove.stop(true);
									}).on(leaveEvent, function () {
										$(this).removeClass('str_active');
										$(this).off('mousemove');
										moveFunc1();
									});

									if (p.drag) {
										strWrap.on('mousedown', function (e) {
											if (p.inverthover) {
												strMove.stop(true);
											}
											//drag
											var dragLeft;
											var dir = 1;
											var newX;
											var oldX = e.clientX;
											//drag

											strMoveLeft = strMove.position().left;
											k1 = strMoveLeft - (e.clientX - strWrap.offset().left);


											$(this).on('mousemove', function (e) {
												fMove = true;

												//drag
												newX = e.clientX;
												if (newX > oldX) {
													dir = 1
												} else {
													dir = -1
												}
												oldX = newX
												dragLeft = k1 + (e.clientX - strWrap.offset().left);

												if (!p.circular) {
													if (dragLeft < -strMove.width() && dir < 0) {
														dragLeft = strWrap.width();
														strMoveLeft = strMove.position().left;
														k1 = strMoveLeft - (e.clientX - strWrap.offset().left);
													}
													if (dragLeft > strWrap.width() && dir > 0) {
														dragLeft = -strMove.width();
														strMoveLeft = strMove.position().left;
														k1 = strMoveLeft - (e.clientX - strWrap.offset().left);
													}
												} else {
													if (dragLeft < -strMove.width() && dir < 0) {
														dragLeft = 0;
														strMoveLeft = strMove.position().left;
														k1 = strMoveLeft - (e.clientX - strWrap.offset().left);
													}
													if (dragLeft > 0 && dir > 0) {
														dragLeft = -strMove.width();
														strMoveLeft = strMove.position().left;
														k1 = strMoveLeft - (e.clientX - strWrap.offset().left);
													}

												}


												strMove.stop(true).css({
													left: dragLeft
												});
												//drag


											}).on('mouseup', function () {
												$(this).off('mousemove');
												if (p.inverthover) {
													strMove.trigger('mouseenter')
												}
												setTimeout(function () {
													fMove = false
												}, 50)

											});
											return false;
										})
											.on('click', function () {
												if (fMove) {
													return false
												}
											});
									} else {
										strWrap.addClass('no_drag');
									}
									;
								}
							} else {
								if (p.runshort) {
									strMove.css({
										left: strWrap.width()
									});
									var
										strMoveLeft = strWrap.width(),
										k1 = 0,
										timeFunc = function () {
											time = (strMove.width() + strMove.position().left) / strWrap.data('scrollamount') * 1000;
											return time;
										};
									var moveFunc = function () {
										var leftPos = -strMove.width();
										strMove.animate({
											left: leftPos
										}, timeFunc(), 'linear', function () {
											$(this).css({
												left: strWrap.width()
											});
											if (loop == -1) {
												setTimeout(moveFunc, p.scrolldelay);
											} else {
												loop--;
												setTimeout(moveFunc, p.scrolldelay);
											}
										});
									};
									strWrap.data({
										moveF: moveFunc
									})
									if (!p.inverthover) {
										moveFunc();
									}
									if (p.hoverstop) {
										strWrap.on(enterEvent, function () {
											$(this).addClass('str_active');
											strMove.stop(true);
										}).on(leaveEvent, function () {
											$(this).removeClass('str_active');
											$(this).off('mousemove');
											moveFunc();
										});

										if (p.drag) {
											strWrap.on('mousedown', function (e) {
												if (p.inverthover) {
													strMove.stop(true);
												}

												//drag
												var dragLeft;
												var dir = 1;
												var newX;
												var oldX = e.clientX;
												//drag

												strMoveLeft = strMove.position().left;
												k1 = strMoveLeft - (e.clientX - strWrap.offset().left);
												$(this).on('mousemove', function (e) {
													fMove = true;


													//drag
													newX = e.clientX;
													if (newX > oldX) {
														dir = 1
													} else {
														dir = -1
													}
													oldX = newX
													dragLeft = k1 + (e.clientX - strWrap.offset().left);

													if (dragLeft < -strMove.width() && dir < 0) {
														dragLeft = strWrap.width();
														strMoveLeft = strMove.position().left;
														k1 = strMoveLeft - (e.clientX - strWrap.offset().left);
													}
													if (dragLeft > strWrap.width() && dir > 0) {
														dragLeft = -strMove.width();
														strMoveLeft = strMove.position().left;
														k1 = strMoveLeft - (e.clientX - strWrap.offset().left);
													}


													strMove.stop(true).css({
														left: dragLeft
													});


												}).on('mouseup', function () {
													if (p.inverthover) {
														strMove.trigger('mouseenter')
													}
													$(this).off('mousemove');
													setTimeout(function () {
														fMove = false
													}, 50)
												});
												return false;
											})
												.on('click', function () {
													if (fMove) {
														return false
													}
												});
										} else {
											strWrap.addClass('no_drag');
										}
										;
									}
								} else {
									strWrap.addClass('str_static');
								}
							}
							;
						}
						;
						if (p.direction == 'right') {
							strWrap.height(strMove.outerHeight())
							strWrap.addClass('str_right');
							strMove.css({
								left: -strMove.width(),
								right: 'auto'
							})

							if (strMove.width() > strWrap.width()) {
								var leftPos = strWrap.width();
								strMove.css({
									left: 0
								})
								if (p.circular) {
									if (!p.xml) {
										circCloneHor()
										//Определяем крайнюю точку
										leftPos = strMove.width();
									}
								}

								var
									k2 = 0;
								timeFunc = function () {
									var
										fullS = strWrap.width(), //крайняя точка
										time = (fullS / strWrap.data('scrollamount')) * 1000; //время
									if (parseFloat(strMove.css('left')) != 0) {
										fullS = (strMove.width() + strWrap.width());
										time = (fullS - (strMove.width() + parseFloat(strMove.css('left')))) / strWrap.data('scrollamount') * 1000;
									}
									return time;
								};
								var moveFunc = function () {

									if (loop != 0) {
										strMove.animate({
											left: leftPos
										}, timeFunc(), 'linear', function () {
											$(this).css({
												left: -strMove.width()
											});
											if (loop == -1) {
												setTimeout(moveFunc, p.scrolldelay);
											} else {
												loop--;
												setTimeout(moveFunc, p.scrolldelay);
											}
											;
										});
									}
									;
								};
								strWrap.data({
									moveF: moveFunc
								})

								if (!p.inverthover) {
									moveFunc();
								}
								if (p.hoverstop) {
									strWrap.on(enterEvent, function () {
										$(this).addClass('str_active');
										strMove.stop(true);
									}).on(leaveEvent, function () {
										$(this).removeClass('str_active');
										$(this).off('mousemove');
										moveFunc();
									});

									if (p.drag) {

										strWrap.on('mousedown', function (e) {
											if (p.inverthover) {
												strMove.stop(true);
											}


											//drag
											var dragLeft;
											var dir = 1;
											var newX;
											var oldX = e.clientX;
											//drag

											strMoveLeft = strMove.position().left;
											k2 = strMoveLeft - (e.clientX - strWrap.offset().left);
											$(this).on('mousemove', function (e) {

												fMove = true;

												//drag
												newX = e.clientX;
												if (newX > oldX) {
													dir = 1
												} else {
													dir = -1
												}
												oldX = newX
												dragLeft = k2 + (e.clientX - strWrap.offset().left);


												if (!p.circular) {

													if (dragLeft < -strMove.width() && dir < 0) {
														dragLeft = strWrap.width();
														strMoveLeft = strMove.position().left;
														k2 = strMoveLeft - (e.clientX - strWrap.offset().left);
													}
													if (dragLeft > strWrap.width() && dir > 0) {
														dragLeft = -strMove.width();
														strMoveLeft = strMove.position().left;
														k2 = strMoveLeft - (e.clientX - strWrap.offset().left);
													}
												} else {
													if (dragLeft < -strMove.width() && dir < 0) {
														dragLeft = 0;
														strMoveLeft = strMove.position().left;
														k2 = strMoveLeft - (e.clientX - strWrap.offset().left);
													}
													if (dragLeft > 0 && dir > 0) {
														dragLeft = -strMove.width();
														strMoveLeft = strMove.position().left;
														k2 = strMoveLeft - (e.clientX - strWrap.offset().left);
													}

												}

												strMove.stop(true).css({
													left: dragLeft
												});


											}).on('mouseup', function () {
												if (p.inverthover) {
													strMove.trigger('mouseenter')
												}
												$(this).off('mousemove');
												setTimeout(function () {
													fMove = false
												}, 50)
											});
											return false;
										})
											.on('click', function () {
												if (fMove) {
													return false
												}
											});
									} else {
										strWrap.addClass('no_drag');
									}
									;
								}
							} else {

								if (p.runshort) {

									var k2 = 0;
									var timeFunc = function () {
										time = (strWrap.width() - strMove.position().left) / strWrap.data('scrollamount') * 1000;
										return time;
									};
									var moveFunc = function () {
										var leftPos = strWrap.width();
										strMove.animate({
											left: leftPos
										}, timeFunc(), 'linear', function () {
											$(this).css({
												left: -strMove.width()
											});
											if (loop == -1) {
												setTimeout(moveFunc, p.scrolldelay);
											} else {
												loop--;
												setTimeout(moveFunc, p.scrolldelay);
											}
											;
										});
									};

									strWrap.data({
										moveF: moveFunc
									})

									if (!p.inverthover) {
										moveFunc();
									}
									if (p.hoverstop) {
										strWrap.on(enterEvent, function () {
											$(this).addClass('str_active');
											strMove.stop(true);
										}).on(leaveEvent, function () {
											$(this).removeClass('str_active');
											$(this).off('mousemove');
											moveFunc();
										});

										if (p.drag) {
											strWrap.on('mousedown', function (e) {
												if (p.inverthover) {
													strMove.stop(true);
												}

												//drag
												var dragLeft;
												var dir = 1;
												var newX;
												var oldX = e.clientX;
												//drag

												strMoveLeft = strMove.position().left;
												k2 = strMoveLeft - (e.clientX - strWrap.offset().left);
												$(this).on('mousemove', function (e) {
													fMove = true;


													//drag
													newX = e.clientX;
													if (newX > oldX) {
														dir = 1
													} else {
														dir = -1
													}
													oldX = newX
													dragLeft = k2 + (e.clientX - strWrap.offset().left);

													if (dragLeft < -strMove.width() && dir < 0) {
														dragLeft = strWrap.width();
														strMoveLeft = strMove.position().left;
														k2 = strMoveLeft - (e.clientX - strWrap.offset().left);
													}
													if (dragLeft > strWrap.width() && dir > 0) {
														dragLeft = -strMove.width();
														strMoveLeft = strMove.position().left;
														k2 = strMoveLeft - (e.clientX - strWrap.offset().left);
													}

													strMove.stop(true).css({
														left: dragLeft
													});

												}).on('mouseup', function () {
													if (p.inverthover) {
														strMove.trigger('mouseenter')
													}
													$(this).off('mousemove');
													setTimeout(function () {
														fMove = false
													}, 50)
												});
												return false;
											})
												.on('click', function () {
													if (fMove) {
														return false
													}
												});
										} else {
											strWrap.addClass('no_drag');
										}
										;
									}
								} else {
									strWrap.addClass('str_static');
								}
							}
							;
						}
						;
						if (p.direction == 'up') {
							strWrap.addClass('str_vertical');

							if (strMove.height() > strWrap.height()) {
								var topPos = -strMove.height();
								if (p.circular) {
									if (!p.xml) {
										circCloneVert();
										topPos = -(strMove.height() + (strMove.height() - strWrap.height()));
									}
								}
								if (p.xml) {
									strMove.css({
										top: strWrap.height()
									})
								}
								var
									k2 = 0;
								timeFunc = function () {
									var
										fullS = Math.abs(topPos),
										time = (fullS / strWrap.data('scrollamount')) * 1000;
									if (parseFloat(strMove.css('top')) != 0) {
										fullS = (fullS + strWrap.height());
										time = (fullS - (strWrap.height() - parseFloat(strMove.css('top')))) / strWrap.data('scrollamount') * 1000;
									}

									return time;
								};
								var moveFunc = function () {
									if (loop != 0) {
										strMove.animate({
											top: topPos
										}, timeFunc(), 'linear', function () {
											$(this).css({
												top: strWrap.height()
											});
											if (loop == -1) {
												setTimeout(moveFunc, p.scrolldelay);
											} else {
												loop--;
												setTimeout(moveFunc, p.scrolldelay);
											}
											;
										});
									}
									;
								};

								strWrap.data({
									moveF: moveFunc
								})

								if (!p.inverthover) {
									moveFunc();
								}
								if (p.hoverstop) {
									strWrap.on(enterEvent, function () {
										$(this).addClass('str_active');
										strMove.stop(true);
									}).on(leaveEvent, function () {
										$(this).removeClass('str_active');
										$(this).off('mousemove');
										moveFunc();
									});

									if (p.drag) {
										strWrap.on('mousedown', function (e) {
											if (p.inverthover) {
												strMove.stop(true);
											}

											//drag
											var dragTop;
											var dir = 1;
											var newY;
											var oldY = e.clientY;
											//drag


											strMoveTop = strMove.position().top;
											k2 = strMoveTop - (e.clientY - strWrap.offset().top);
											$(this).on('mousemove', function (e) {

												fMove = true;

												//drag
												newY = e.clientY;
												if (newY > oldY) {
													dir = 1
												} else {
													if (newY < oldY) {
														dir = -1
													}
												}
												oldY = newY
												dragTop = k2 + e.clientY - strWrap.offset().top;


												if (!p.circular) {
													if (dragTop < -strMove.height() && dir < 0) {
														dragTop = strWrap.height();
														strMoveTop = strMove.position().top;
														k2 = strMoveTop - (e.clientY - strWrap.offset().top);
													}
													if (dragTop > strWrap.height() && dir > 0) {
														dragTop = -strMove.height();
														strMoveTop = strMove.position().top;
														k2 = strMoveTop - (e.clientY - strWrap.offset().top);
													}
												} else {
													if (dragTop < -strMove.height() && dir < 0) {
														dragTop = 0;
														strMoveTop = strMove.position().top;
														k2 = strMoveTop - (e.clientY - strWrap.offset().top);
													}
													if (dragTop > 0 && dir > 0) {
														dragTop = -strMove.height();
														strMoveTop = strMove.position().top;
														k2 = strMoveTop - (e.clientY - strWrap.offset().top);
													}
												}


												strMove.stop(true).css({
													top: dragTop
												});
												//drag


											}).on('mouseup', function () {
												if (p.inverthover) {
													strMove.trigger('mouseenter')
												}
												$(this).off('mousemove');
												setTimeout(function () {
													fMove = false
												}, 50)
											});
											return false;
										})
											.on('click', function () {
												if (fMove) {
													return false
												}
											});
									} else {
										strWrap.addClass('no_drag');
									}
									;
								}
							} else {
								if (p.runshort) {
									strMove.css({
										top: strWrap.height()
									});
									var k2 = 0;
									var timeFunc = function () {

										time = (strMove.height() + strMove.position().top) / strWrap.data('scrollamount') * 1000;

										return time;
									};
									var moveFunc = function () {
										var topPos = -strMove.height();
										strMove.animate({
											top: topPos
										}, timeFunc(), 'linear', function () {
											$(this).css({
												top: strWrap.height()
											});
											if (loop == -1) {
												setTimeout(moveFunc, p.scrolldelay);
											} else {
												loop--;
												setTimeout(moveFunc, p.scrolldelay);
											}
											;
										});
									};
									strWrap.data({
										moveF: moveFunc
									})
									if (!p.inverthover) {
										moveFunc();
									}
									if (p.hoverstop) {
										strWrap.on(enterEvent, function () {
											$(this).addClass('str_active');
											strMove.stop(true);
										}).on(leaveEvent, function () {
											$(this).removeClass('str_active');
											$(this).off('mousemove');
											moveFunc();
										});

										if (p.drag) {
											strWrap.on('mousedown', function (e) {
												if (p.inverthover) {
													strMove.stop(true);
												}

												//drag
												var dragTop;
												var dir = 1;
												var newY;
												var oldY = e.clientY;
												//drag

												strMoveTop = strMove.position().top;
												k2 = strMoveTop - (e.clientY - strWrap.offset().top);
												$(this).on('mousemove', function (e) {


													fMove = true;

													//drag
													newY = e.clientY;
													if (newY > oldY) {
														dir = 1
													} else {
														if (newY < oldY) {
															dir = -1
														}
													}
													oldY = newY
													dragTop = k2 + e.clientY - strWrap.offset().top;

													if (dragTop < -strMove.height() && dir < 0) {
														dragTop = strWrap.height();
														strMoveTop = strMove.position().top;
														k2 = strMoveTop - (e.clientY - strWrap.offset().top);
													}
													if (dragTop > strWrap.height() && dir > 0) {
														dragTop = -strMove.height();
														strMoveTop = strMove.position().top;
														k2 = strMoveTop - (e.clientY - strWrap.offset().top);
													}
													//*drag

													strMove.stop(true).css({
														top: dragTop
													});


												}).on('mouseup', function () {
													if (p.inverthover) {
														strMove.trigger('mouseenter')
													}
													$(this).off('mousemove');
													setTimeout(function () {
														fMove = false
													}, 50)
												});
												return false;
											})
												.on('click', function () {
													if (fMove) {
														return false
													}
												});
										} else {
											strWrap.addClass('no_drag');
										}
										;
									}
								} else {
									strWrap.addClass('str_static');
								}
							}
							;
						}
						;
						if (p.direction == 'down') {

							strWrap.addClass('str_vertical').addClass('str_down');
							strMove.css({
								top: -strMove.height(),
								bottom: 'auto'
							})
							if (strMove.height() > strWrap.height()) {
								var topPos = strWrap.height();
								if (p.circular) {
									if (!p.xml) {
										circCloneVert();
										topPos = strMove.height();
									}
								}
								if (p.xml) {
									strMove.css({
										top: -strMove.height()
									})
								}
								var
									k2 = 0;
								timeFunc = function () {
									var
										fullS = strWrap.height(), //крайняя точка
										time = (fullS / strWrap.data('scrollamount')) * 1000; //время

									if (parseFloat(strMove.css('top')) != 0) {
										fullS = (strMove.height() + strWrap.height());
										time = (fullS - (strMove.height() + parseFloat(strMove.css('top')))) / strWrap.data('scrollamount') * 1000;
									}
									return time;
								};
								var moveFunc = function () {

									if (loop != 0) {
										strMove.animate({
											top: topPos
										}, timeFunc(), 'linear', function () {
											$(this).css({
												top: -strMove.height()
											});
											if (loop == -1) {

												setTimeout(moveFunc, p.scrolldelay);
											} else {
												loop--;
												setTimeout(moveFunc, p.scrolldelay);
											}
											;
										});
									}
									;
								};
								strWrap.data({
									moveF: moveFunc
								})
								if (!p.inverthover) {
									moveFunc();
								}
								if (p.hoverstop) {
									strWrap.on(enterEvent, function () {
										$(this).addClass('str_active');
										strMove.stop(true);
									}).on(leaveEvent, function () {
										$(this).removeClass('str_active');
										$(this).off('mousemove');
										moveFunc();
									});

									if (p.drag) {
										strWrap.on('mousedown', function (e) {
											if (p.inverthover) {
												strMove.stop(true);
											}

											//drag
											var dragTop;
											var dir = 1;
											var newY;
											var oldY = e.clientY;
											//drag


											strMoveTop = strMove.position().top;
											k2 = strMoveTop - (e.clientY - strWrap.offset().top);
											$(this).on('mousemove', function (e) {

												fMove = true;

												//drag
												newY = e.clientY;
												if (newY > oldY) {
													dir = 1
												} else {
													if (newY < oldY) {
														dir = -1
													}
												}
												oldY = newY
												dragTop = k2 + e.clientY - strWrap.offset().top;


												if (!p.circular) {
													if (dragTop < -strMove.height() && dir < 0) {
														dragTop = strWrap.height();
														strMoveTop = strMove.position().top;
														k2 = strMoveTop - (e.clientY - strWrap.offset().top);
													}
													if (dragTop > strWrap.height() && dir > 0) {
														dragTop = -strMove.height();
														strMoveTop = strMove.position().top;
														k2 = strMoveTop - (e.clientY - strWrap.offset().top);
													}
												} else {
													if (dragTop < -strMove.height() && dir < 0) {
														dragTop = 0;
														strMoveTop = strMove.position().top;
														k2 = strMoveTop - (e.clientY - strWrap.offset().top);
													}
													if (dragTop > 0 && dir > 0) {
														dragTop = -strMove.height();
														strMoveTop = strMove.position().top;
														k2 = strMoveTop - (e.clientY - strWrap.offset().top);
													}
												}


												strMove.stop(true).css({
													top: dragTop
												});
												//drag


											}).on('mouseup', function () {
												if (p.inverthover) {
													strMove.trigger('mouseenter')
												}
												$(this).off('mousemove');
												setTimeout(function () {
													fMove = false
												}, 50)
											});
											return false;
										})
											.on('click', function () {
												if (fMove) {
													return false
												}
											});
									} else {
										strWrap.addClass('no_drag');
									}
									;
								}
							} else {
								if (p.runshort) {
									var k2 = 0;
									var timeFunc = function () {
										time = (strWrap.height() - strMove.position().top) / strWrap.data('scrollamount') * 1000;
										return time;
									};
									var moveFunc = function () {
										var topPos = strWrap.height();
										strMove.animate({
											top: topPos
										}, timeFunc(), 'linear', function () {
											$(this).css({
												top: -strMove.height()
											});
											if (loop == -1) {
												setTimeout(moveFunc, p.scrolldelay);
											} else {
												loop--;
												setTimeout(moveFunc, p.scrolldelay);
											}
											;
										});
									};
									strWrap.data({
										moveF: moveFunc
									})
									if (!p.inverthover) {
										moveFunc();
									}
									if (p.hoverstop) {
										strWrap.on(enterEvent, function () {
											$(this).addClass('str_active');
											strMove.stop(true);
										}).on(leaveEvent, function () {
											$(this).removeClass('str_active');
											$(this).off('mousemove');
											moveFunc();
										});

										if (p.drag) {
											strWrap.on('mousedown', function (e) {
												if (p.inverthover) {
													strMove.stop(true);
												}

												//drag
												var dragTop;
												var dir = 1;
												var newY;
												var oldY = e.clientY;
												//drag

												strMoveTop = strMove.position().top;
												k2 = strMoveTop - (e.clientY - strWrap.offset().top);
												$(this).on('mousemove', function (e) {
													fMove = true;

													//drag
													newY = e.clientY;
													if (newY > oldY) {
														dir = 1
													} else {
														if (newY < oldY) {
															dir = -1
														}
													}
													oldY = newY
													dragTop = k2 + e.clientY - strWrap.offset().top;


													if (dragTop < -strMove.height() && dir < 0) {
														dragTop = strWrap.height();
														strMoveTop = strMove.position().top;
														k2 = strMoveTop - (e.clientY - strWrap.offset().top);
													}
													if (dragTop > strWrap.height() && dir > 0) {
														dragTop = -strMove.height();
														strMoveTop = strMove.position().top;
														k2 = strMoveTop - (e.clientY - strWrap.offset().top);
													}
													//*drag

													strMove.stop(true).css({
														top: dragTop
													});


												}).on('mouseup', function () {
													if (p.inverthover) {
														strMove.trigger('mouseenter')
													}
													$(this).off('mousemove');
													setTimeout(function () {
														fMove = false
													}, 50)
												})
												return false;
											})
												.on('click', function () {
													if (fMove) {
														return false
													}
												});
										} else {
											strWrap.addClass('no_drag');
										}
										;
									}
								} else {
									strWrap.addClass('str_static');
								}
							}
							;
						}
						;


					}
					if (p.xml) {
						$.ajax({
							url: p.xml,
							dataType: "xml",
							success: function (xml) {
								var xmlTextEl = $(xml).find('text');
								var xmlTextLength = xmlTextEl.length;
								for (var i = 0; i < xmlTextLength; i++) {
									var xmlElActive = xmlTextEl.eq(i);
									var xmlElContent = xmlElActive.text();
									var xmlItemEl = $('<span>').text(xmlElContent).appendTo(strWrap);

									if (p.direction == 'left' || p.direction == 'right') {
										xmlItemEl.css({display: 'inline-block', textAlign: 'right'});
										if (i > 0) {
											xmlItemEl.css({width: strWrap.width() + xmlItemEl.width()});
										}
									}
									if (p.direction == 'down' || p.direction == 'up') {
										xmlItemEl.css({display: 'block', textAlign: 'left'});
										if (i > 0) {
											xmlItemEl.css({paddingTop: strWrap.height()});
										}
									}

								}
								code();
							}
						});
					} else {
						code();
					}
					strWrap.data({
						ini: code,
						startheight: startHeight
					})


				});
			},
			update: function () {
				var el = $(this);
				var str_origin = $('.str_origin', el);
				var str_move_clone = $('.str_move_clone', el);
				str_origin.stop(true);
				str_move_clone.remove();
				el.data('ini')();
			},
			destroy: function () {

				var el = $(this);
				var elMove = $('.str_move', el);
				var startHeight = el.data('startheight');

				$('.str_move_clone', el).remove();
				el.off('mouseenter');
				el.off('mousedown');
				el.off('mouseup');
				el.off('mouseleave');
				el.off('mousemove');
				el.removeClass('noStop').removeClass('str_vertical').removeClass('str_active').removeClass('no_drag').removeClass('str_static').removeClass('str_right').removeClass('str_down');

				var elStyle = el.attr('style');
				if (elStyle) {
					var styleArr = elStyle.split(';');
					for (var i = 0; i < styleArr.length; i++) {
						var str = $.trim(styleArr[i]);
						var tested = str.search(/^height/g);
						if (tested != -1) {
							styleArr[i] = '';
						}
					}
					var newArr = styleArr.join(';');
					var newStyle = newArr.replace(/;+/g, ';')

					if (newStyle == ';') {
						el.removeAttr('style');
					} else {
						el.attr('style', newStyle);
					}

					if (startHeight) {
						el.css({height: startHeight})
					}
				}
				elMove.stop(true);

				if (elMove.length) {
					var context = elMove.html();
					elMove.remove();
					el.html(context);
				}

			},
			pause: function () {
				var el = $(this);
				var elMove = $('.str_move', el);
				elMove.stop(true);
			},
			play: function () {
				var el = $(this);
				$(this).off('mousemove');
				el.data('moveF')();
			}

		};
		$.fn.liMarquee = function (method) {
			if (methods[method]) {
				return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
			} else if (typeof method === 'object' || !method) {
				return methods.init.apply(this, arguments);
			} else {
				$.error('Метод ' + method + ' в jQuery.liMarquee не существует');
			}
		};
	})(jQuery);
	exports('liMarquee', null);
});